//引入express
const bodyParser = require("body-parser");
var express = require("express");
//项目标签页的图标：一般后台配置
var morgan = require("morgan");
var fs = require("fs");
//引入日志
var favicon = require("serve-favicon");
//利用express创建服务器
var app = express();
// //配置客户端可以访问的静态文件
// app.use(express.static('html'));
// //使用图标
// app.use(favicon('./html/favicon.ico'));
//配置日志
app.use(morgan("dev"));
var UUID = require("uuid");

//配置token
const jwt = require("jsonwebtoken");

//配置post请求
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// app.use(express.json())
// // 表单请求
// app.use(express.urlencoded({extended: false}))

//引入session
var session = require("express-session");
app.use(
    session({
        secret: "keyboard cat", //加密字符串，session
        resave: true, //重新保存时间
        rolling: true, //更新过期时间
        saveUninitialized: true,
        cookie: { maxAge: 60000 }, //6min }//设置过期时间，默认毫秒是单位
        name: "yh",
    })
);
// var sessionUser;
// //接口的拦截了所有的请求
// app.all('*', function (req, res, next) {
//     sessionUser = req.session.user
//     // console.log(req.url.split('?')[0]);
//     if (req.session.user || req.url.split('?')[0] == '/login') {
//         next();
//     } else {
//         console.log('重定向');
//         res.json({ code: 401, data: '请登录' });
//     }
// })
let db = require("./utils/db");

app.post("/register", function (req, res) {
    let reqs = req.body;
    //先查询是否存在相同账号
    let sql =
        'select count(id) count from user where user_name="' + reqs.inp1 + '"';
    let sql1 =
        'insert into user(id,user_name,password,image_url) values("' +
        UUID.v1() +
        '","' +
        reqs.inp1 +
        '","' +
        reqs.inp2 +
        '","' +
        reqs.imgUrl +
        '")';
    db.query(sql, function (err, data) {
        if (data[0].count > 0) {
            res.json({
                code: 400,
                data: "已存在",
            });
        } else {
            db.query(sql1, function (err1, data1) {
                res.json({
                    code: 200,
                    data: "注册成功~",
                });
            });
        }
    });
});
//登录签发token
app.get("/login", function (req, res, next) {
    //登录查询该用户id，根据用户id签发token
    let sql =
        'SELECT * FROM `user` WHERE user_name="' +
        req.query.user_name +
        '" AND password="' +
        req.query.password +
        '"';
    db.query(sql, function (err, data) {
        console.log(sql);
        if (data) {
            let secret = "online-shopping-mall"; //自定义
            app.set("superSecret", secret);
            //生成token
            const token = jwt.sign(data[0].id, app.get("superSecret"));
            res.json({
                code: 200,
                message: "登录成功",
                token: token,
            });
        } else {
            res.json({
                val: "登陆失败",
            });
        }
    });
});

// app.all('/*',function(req,res,next){
//     //拦截所有请求，检查header中token值是否正确，不正确返回token无效，正确则放行
//     var token=req.headers.token;
//     let userId='';
//     jwt.verify(token, app.get('superSecret'), function (err, userId){
//         userId=userId;
//         //查询数据库是否有该用户，是则放行
//         console.log(userId);
//         if(userId){
//             next();
//         }else{
//             res.json({msg:'无效的token,请检查'});
//         }
//     })
// })

//杨浩接口
var yanghao = require("./router/yanghao.js");
app.use(yanghao);
//胡玉鑫接口
var huyuxing = require("./router/huyuxing.js");
app.use(huyuxing);
//黄益接口
var huangyi = require("./router/huangyi.js");
app.use(express.static("uploads"));
app.use(huangyi);
//黄莹接口
var huangying = require("./router/huangying.js");
app.use(huangying);
//王方华接口
var wangfanghua = require("./router/wangfanghua.js");
app.use(wangfanghua);
//潘晨接口
var pangceng = require("./router/panchen.js");
app.use(pangceng);

app.use((req, res, next) => {
    //判断路径
    if (req.path !== "/" && !req.path.includes(".")) {
        res.set({
            "Access-Control-Allow-Credentials": true, //允许后端发送cookie
            "Access-Control-Allow-Origin": req.headers.origin || "*", //任意域名都可以访问,或者基于我请求头里面的域
            "Access-Control-Allow-Headers": "X-Requested-With,Content-Type", //设置请求头格式和类型
            "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS", //允许支持的请求方式
            "Content-Type": "application/json; charset=utf-8", //默认与允许的文本格式json和编码格式
        });
    }
    req.method === "OPTIONS" ? res.status(204).end() : next();
});

//文件上传配置
var multer = require("multer");
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        //指定的硬盘路径
        cb(null, "./upload");
    },
    filename: function (req, file, cb) {
        //修改文件名
        console.log("file", file); //新建文件-123123123.xls
        var file = file.originalname;
        var index = file.lastIndexOf(".");
        var res =
            file.substring(0, index) + "-" + Date.now() + file.substring(index);
        cb(null, res);
    },
});

var upload = multer({ storage: storage });

app.get("/xxx", function (req, res) {
    res.json({ a: "1" });
});
app.post("/xxx", function (req, res) {
    res.json({ a: 11 });
});
var fs = require("fs"); // nodejs 自带的模块
//上传图片的接口
app.post("/uploadimg", function (req, res) {
    console.log(req.body.img, "yhyhhyhyhy");
    console.log(req.body.img);
    //1、如果图片小直接放到数据库
    //2、图片大，保存成本地文件  返回前台文件的路径
    var imgData = req.body.img;
    //把base64转成本地文件
    //base64转化成文件就是需要把base64的前缀去掉，这件事情，可以前台，可以后台
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    //把base64转化成二进制流文件
    var dataBuffer = Buffer.from(base64Data, "base64");
    //fs读取二进制流文件，保存为本地文件
    //fs.writeFile(__dirname+'/http/uploads/'+Date.now()+'.jpg')
    var filename = Date.now() + ".jpg";
    fs.writeFile("./upload/" + filename, dataBuffer, function (err) {
        if (err) {
            res.json({ error: 1, msg: "保存失败" });
        } else {
            res.json({ error: 0, msg: "保存成功", data: filename });
        }
    });
});

//下载接口
app.get("/download", function (req, res) {
    var fileUrl = "F:/1qianduan/day3-4node/upload/" + req.query.url;
    try {
        var imageData = fs.readFileSync(fileUrl); // 例：fileUrl="D:\\test\\test.bmp"
        var imageBase64 = imageData.toString("base64");
        var imagePrefix = "data:image/png;base64,";
        res.json({ error: 0, file: imagePrefix + imageBase64 });
    } catch (err) {
        res.json({ error: 1 });
    }
});

//配置端口号,参数中的函数可有可无
app.listen(8888, function () {
    console.log("项目启动");
});

module.exports = {
    db: db,
};

// // ---------------------------------------------
// //引入ws
// var ws = require('ws').Server;
// //创建ws服务
// var server = new ws({
//     host: '172.16.10.20',
//     port: 9090
// });
// var arr = [];
// //有人和我建立关联时
// server.on('connection',function(ws){//ws当前链接的对象
//     console.log('有人进来了');
//     arr.push(ws);

//     //当有人发送消息的时候
//     ws.on('message',function(data){//data就是发送过来的消息
//         console.log('接收到的数据',data);
//         for(var i=0;i<arr.length;i++){
//             //给别人发送消息
//             arr[i].send(data);
//         }
//     })
//     ////断开链接
//     ws.on('close',function(){
//         for(var i=0;i<arr.length;i++){
//             if(arr[i]==ws){
//                 arr.splice(i,1);
//                 break;
//             }
//         }
//     })
// })
